/******************************************************************************* * Copyright (c) 2004, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.internal.activities.ws; import java.util.ArrayList; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.WorkbenchPlugin; import org.eclipse.ui.internal.misc.StatusUtil; import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; import org.eclipse.ui.internal.registry.RegistryReader; /** */ public class TriggerPointAdvisorRegistry { private static TriggerPointAdvisorRegistry instance; /** * */ private TriggerPointAdvisorRegistry() { } /** * Return the instance of this registry. * * @return the instance of this registry */ public static TriggerPointAdvisorRegistry getInstance() { if (instance == null) { instance = new TriggerPointAdvisorRegistry(); } return instance; } /** * Return the trigger point advisors. * * @return the advisors */ public TriggerPointAdvisorDescriptor[] getAdvisors() { // RAP [fappel]: ep name-space differs from bundle ids // IExtensionPoint point = Platform.getExtensionRegistry() // .getExtensionPoint(PlatformUI.PLUGIN_ID, // IWorkbenchRegistryConstants.PL_ACTIVITYSUPPORT); IExtensionPoint point = Platform.getExtensionRegistry() .getExtensionPoint(PlatformUI.PLUGIN_EXTENSION_NAME_SPACE, IWorkbenchRegistryConstants.PL_ACTIVITYSUPPORT); if (point == null) { return new TriggerPointAdvisorDescriptor[0]; } IExtension[] extensions = point.getExtensions(); extensions = RegistryReader.orderExtensions(extensions); ArrayList list = new ArrayList(extensions.length); for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] elements = extensions[i] .getConfigurationElements(); for (int j = 0; j < elements.length; j++) { if (elements[j].getName().equals( IWorkbenchRegistryConstants.TAG_TRIGGERPOINTADVISOR)) { try { TriggerPointAdvisorDescriptor descriptor = new TriggerPointAdvisorDescriptor( elements[j]); list.add(descriptor); } catch (IllegalArgumentException e) { // log an error since its not safe to open a dialog here WorkbenchPlugin.log( "invalid trigger point advisor extension", //$NON-NLS-1$ StatusUtil.newStatus(IStatus.ERROR, e .getMessage(), e)); } } } } return (TriggerPointAdvisorDescriptor[]) list .toArray(new TriggerPointAdvisorDescriptor[list.size()]); } // RAP [fappel]: product id not support, but branding id // /** // * Return the trigger point advisor bound to a given product. // * // * @param productId // * the product id // * @return the advisor // */ // public TriggerPointAdvisorDescriptor getAdvisorForProduct(String productId) { /** * Return the trigger point advisor bound to a given branding. * * @param brandingId * the branding id * @return the advisor */ public TriggerPointAdvisorDescriptor getAdvisorForBranding(String brandingId) { // RAP [fappel]: ep name-space differs from bundle ids // IExtensionPoint point = Platform.getExtensionRegistry() // .getExtensionPoint(PlatformUI.PLUGIN_ID, // IWorkbenchRegistryConstants.PL_ACTIVITYSUPPORT); IExtensionPoint point = Platform.getExtensionRegistry() .getExtensionPoint(PlatformUI.PLUGIN_EXTENSION_NAME_SPACE, IWorkbenchRegistryConstants.PL_ACTIVITYSUPPORT); if (point == null) { return null; } IExtension[] extensions = point.getExtensions(); extensions = RegistryReader.orderExtensions(extensions); // String targetIntroId = getAdvisorForProduct(productId, extensions); String targetIntroId = getAdvisorForBranding(brandingId, extensions); if (targetIntroId == null) { return null; } TriggerPointAdvisorDescriptor[] advisors = getAdvisors(); for (int i = 0; i < advisors.length; i++) { if (advisors[i].getId().equals(targetIntroId)) { return advisors[i]; } } return null; } // RAP [fappel]: ep name-space differs from bundle ids // /** // * @param targetProductId // * @param extensions // * @return the advisor id // */ // private String getAdvisorForProduct(String targetProductId, // IExtension[] extensions) { /** * @param targetBrandingId * @param extensions * @return the advisor id */ private String getAdvisorForBranding(String targetBrandingId, IExtension[] extensions) { for (int i = 0; i < extensions.length; i++) { IConfigurationElement[] elements = extensions[i] .getConfigurationElements(); for (int j = 0; j < elements.length; j++) { if (elements[j].getName().equals( IWorkbenchRegistryConstants.TAG_ADVISORPRODUCTBINDING)) { String advisorId = elements[j] .getAttribute(IWorkbenchRegistryConstants.ATT_ADVISORID); String productId = elements[j] .getAttribute(IWorkbenchRegistryConstants.ATT_PRODUCTID); if (advisorId == null || productId == null) { IStatus status = new Status( IStatus.ERROR, elements[j].getDeclaringExtension() .getNamespace(), IStatus.ERROR, "triggerPointAdvisorId and productId must be defined.", new IllegalArgumentException()); //$NON-NLS-1$ WorkbenchPlugin .log( "Invalid trigger point advisor binding", status); //$NON-NLS-1$ continue; } if (targetBrandingId.equals(productId)) { return advisorId; } } } } return null; } }